/**
 * Author@ Cheng Feitian
 * Date: 2021-4-8
 * Description: 函数模板案例数组排序
 */

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;
const int maxn = 1024;

template <typename T>
void mySwap(T &a, T &b)
{
    T temp = a;
    a = b;
    b = temp;
}

//利用选择排序
template <typename T>
void mySort(T arr[], int len)
{
    for (int i = 0; i < len; i++)
    {
        int max = i; //假设最大值的下标
        for (int j = len - 1; j > i; j--)
        {
            //认定的最大值 比 遍历出的数值要小，说明j下标的元素才是真正的最大值
            if (arr[max] < arr[j])
            {
                max = j; //更新最大值下标
                // mySwap(arr[i],arr[j]);
            }
        }
        if (max != i)
        {
            //交换max和i下标的元素
            mySwap(arr[max], arr[i]);
        }
    }
}

template <typename T>
void printArray(T arr[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << "\t";
    }
    cout << endl;
}

void test01()
{
    //测试char数组
    char charArr[] = "bdcfeagh";
    int num = sizeof(charArr) / sizeof(char);
    mySort(charArr, num);
    printArray(charArr, num);
}

void test02()
{
    //测试int数组
    int intArr[] = {7, 5, 8, 1, 3, 9, 2, 4, 6};
    int num = sizeof(intArr) / sizeof(int);
    mySort(intArr, num);
    printArray(intArr, num);
}

int main()
{
    test01();
    test02();
    return 0;
}
